public class question_200 {
}
class Solution {
    //定义一个全局变量
    public int sum=1;
    //写一个递归的算法来纠结这个问题
    void dfs(char[][] c,int arr[][],int x,int y,int ceng){
        if(c[x][y]=='0'||arr[x][y]!=0)//表明要么是水域要么就是已经探索过的陆地
            return;
        arr[x][y]=sum;//对该篇为探索的陆地做标记
        if(x!=0)//向上面探索
            dfs(c,arr,x-1,y,ceng+1);
        //向右边探索
        if(y!=c[0].length-1)
            dfs(c,arr,x,y+1,ceng+1);
        if(x!=c.length-1)//向下面探索
            dfs(c,arr,x+1,y,ceng+1);
        if(y!=0)//向左边探索
            dfs(c,arr,x,y-1,ceng+1);
        if(ceng==1)//回到第一层，说明已经遍历完了完整的一块陆地
            sum++;//陆地数量++
    }
    public int numIslands(char[][] grid) {
        int x=0,y=0;
        int arr[][]=new int[grid.length][grid[0].length];//生成对应的标记数组
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                dfs(grid,arr,i,j,1);
            }
        }
        int temp=sum;//记录下岛屿的次数
        sum=0;//将全局变量进行重置
        return temp-1;
    }
}